#include "stm32f10x.h"                  // Device header

uint8_t KeyNumber;

void Key_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;                        
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_12|GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//输入模式下该数值用处不大
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12;
	GPIO_Init(GPIOA,&GPIO_InitStructure);	
}

uint8_t GetKeyState()
{
	uint8_t KeyNum=0;
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==0)KeyNum=1;
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0)KeyNum=2;
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==0)KeyNum=3;
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)==0)KeyNum=4;
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3)==0)KeyNum=5;
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)==0)KeyNum=6;	
	
	return KeyNum;
}

uint8_t Key_GetNum()
{
	uint8_t temp;
	if(KeyNumber)
	{
		temp=KeyNumber;
		KeyNumber=0;
		return temp;
	}
	return 0;
}

void Key_Loop()
{
	static uint8_t LastState,NowState;
	LastState=NowState;
	NowState=GetKeyState();
	if(LastState==1 && NowState==0)
	{
		KeyNumber=1;
	}
	if(LastState==2 && NowState==0)
	{
		KeyNumber=2;
	}
	if(LastState==3 && NowState==0)
	{
		KeyNumber=3;
	}
	if(LastState==4 && NowState==0)
	{
		KeyNumber=4;
	}
	if(LastState==5 && NowState==0)
	{
		KeyNumber=5;
	}	
	if(LastState==6 && NowState==0)
	{
		KeyNumber=6;
	}		
}
